/**********************************************************

@description:
*File Name:sequence_search.c
*Author: ydx
*mail: yudongxiang93@163.com
*Create Time: Thu 08 May 2025 09:01:34 PM CST
**********************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct list{
	int* data;
	int size;
	int num;
}list;
list* init_list(int len){
	list* l=(list*)malloc(sizeof(list));
	assert(l);
	l->data=(int*)malloc(sizeof(int)*len);
	assert(l->data);
	l->num=0;
	l->size=len;
	return l;
}
void swap(int* arr,int i,int j){
	int tmp=arr[i];
	arr[i]=arr[j];
	arr[j]=tmp;
}
void sort(int* arr,int len){
	for(int i=0;i<len;i++){
		for(int j=0;j<len-i-1;j++){
			if(arr[j]>arr[j+1])
				swap(arr,j,j+1);
		}
	}
}
void list_add(list* l,int data){
	if(l->num<l->size)
		l->data[l->num++]=data;
}
int binary_search(list* l,int key,int start,int end){
	if(start>end){
		return -1;
	}
	int i=(start+end)/2;
	if(l->data[i]==key)
		return i;
	else if(l->data[i]>key)
		binary_search(l,key,start,i-1);
	else
		binary_search(l,key,i+1,end);
}
int binary_search_1(list* l,int key){
	int start=0;
	int end=l->num-1;
	int mid;
	while(start<=end){
		mid=(start+end)/2;
		if(l->data[mid]==key)
			return mid;
		else if(l->data[mid]<key)
			end=mid-1;
		else
			start=mid+1;
	}
	return -1;
}
void print_list(list* l){
	for(int i=0;i<l->num;i++){
		printf("%4d->",l->data[i]);
	}
	printf("\n");
}
int main(){
	list* l=init_list(5);
	list_add(l,7);
	list_add(l,2);
	list_add(l,3);
	list_add(l,10);
	list_add(l,5);
	list_add(l,6);
	sort(l->data,l->num);
	print_list(l);
	//int res=binary_search(l,5,0,l->num-1);
	int res=binary_search_1(l,9);
	printf("res:%d\n",res);
}
